package com.sisgesbyte.services.proyeccion;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstProyeccion;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.proyeccion.MantBandaProyeccionDao;
import com.sisgesbyte.dao.proyeccion.MantProyeccionFFVVDao;
import com.sisgesbyte.dao.proyeccion.MantProyeccionFFVVDetalleDao;
import com.sisgesbyte.dao.ventas.ConsultaVentasDao;
import com.sisgesbyte.dao.ventas.MantEmpleadoEstructuraDao;
import com.sisgesbyte.data.entity.proyeccion.BandaProyeccionEntity;
import com.sisgesbyte.data.entity.proyeccion.ProyeccionFFVVDetalleEntity;
import com.sisgesbyte.data.entity.proyeccion.ProyeccionFFVVEntity;
import com.sisgesbyte.data.entity.ventas.EmpleadoEstructuraEntity;
import com.sisgesbyte.data.entity.ventas.VentasEntity;
import com.sisgesbyte.services.proyeccion.bean.AvanceProyeccionFFVVResponse;
import com.sisgesbyte.services.proyeccion.bean.AvanceProyeccionProductResponse;
import com.sisgesbyte.services.proyeccion.bean.AvanceVentaProductosBean;
import com.sisgesbyte.services.proyeccion.bean.FiltroOpcionesFFVVBean;
import com.sisgesbyte.services.proyeccion.bean.ProyeccionFFVVBean;
import com.sisgesbyte.services.ventas.MantenimientoFFVVService;
import com.sisgesbyte.services.ventas.bean.FFVVBean;
import com.sisgesbyte.services.ventas.bean.ListaFFVVJerarquiaResponse;

@Stateless
public class ProyeccionFfVvServiceImpl implements ProyeccionFfVvService {

	@EJB
	private MantEmpleadoEstructuraDao mantEmpleadoEstructuraDao;
	@EJB
	private MantProyeccionFFVVDao mantProyeccionFFVVDao;
	@EJB
	private MantProyeccionFFVVDetalleDao mantProyeccionFFVVDetalleDao;
	@EJB
	private MantBandaProyeccionDao mantBandaProyeccionDao;
	@EJB
	private ConsultaVentasDao consultaVentasDao;
	@EJB
	private MantenimientoFFVVService mantenimientoFFVVService;
	@Inject
	private Validaciones validaciones;
	private List<EmpleadoEstructuraEntity> hijos;
	private  List<EmpleadoEstructuraEntity> listaEmpleadosHijos;
	
	@Override
	public AvanceProyeccionFFVVResponse avanceProyeccionFFVV(
			String codTransaccion, FiltroOpcionesFFVVBean filtros) {
		
		String mensajeTransaccionMetodo = "[avanceProyeccionFFVV idTx=" + codTransaccion + "] - ";
		AvanceProyeccionFFVVResponse response = new AvanceProyeccionFFVVResponse();
		
		//validamos que exita el idPeriodo
		if(!(filtros.getIdPeriodo() > 0)){
			System.out.println("el IdPeriodo debe ser mayor que 0 y diferente de null");
			response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDF);
			return response;
		}
		
		List<EmpleadoEstructuraEntity> listaEmpleados=null;
		try{
			 FiltrosSQLBean filtroSQL= new FiltrosSQLBean();
			 List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			 //filtro para zonas
			 FiltrosBean filtroZona = new FiltrosBean();
			 List<String> camposZona = new ArrayList<String>();
			 if(filtros.getIdZona() > 0 ){
				 camposZona.add("ee.zona_id");
			 }
			 filtroZona.setCampos(camposZona);
			 filtroZona.setOperador("=");
			 //***** fin filtro zona
			 listaFiltros.add(filtroZona);
			 //filtro para canales o categoria_cliente
			 FiltrosBean filtroCanal = new FiltrosBean();
			 List<String> camposCanal = new ArrayList<String>();
			 if(filtros.getIdCanal() > 0){
				 camposCanal.add("ee.categoria_cliente_id");
			 }
			 filtroCanal.setCampos(camposCanal);
			 filtroCanal.setOperador("=");
			 //***** fin filtro zona
			 listaFiltros.add(filtroCanal);
			 
			 List<Object> valores = new ArrayList<Object>();
			 if(filtros.getIdZona() > 0){
				 valores.add(filtros.getIdZona());
			 }
			 if(filtros.getIdCanal() > 0){
				 valores.add(filtros.getIdCanal());
			 }
			 filtroSQL.setListaFiltros(listaFiltros);
			 filtroSQL.setListaValores(valores);
			 filtroSQL.setCampoOrden("ee.estructura_venta_id");
			 filtroSQL.setTipoOrden("asc");
			//1.- Obtenemos la lista de FFVV
			listaEmpleados = mantEmpleadoEstructuraDao.listaEmpleadosEstructura(filtroSQL);
			listaEmpleadosHijos = listaEmpleados;
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar FFVV en BD " + e);
			response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDT);
			return response;
		}
		
		if(!(listaEmpleados.size() > 0)){
			System.out.println("No se encontraron Datos al listar de FFVV");
			response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDF);
			return response;
		}
		
		List<ProyeccionFFVVEntity> listaProyeccionFFVV =null;
		try{
			FiltrosSQLBean filtroSQL= new FiltrosSQLBean();
			 List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			//filtro para periodos
			 FiltrosBean filtroPeriodo = new FiltrosBean();
			 List<String> camposPeriodo = new ArrayList<String>();
			 if(filtros.getIdPeriodo() > 0){
				 camposPeriodo.add("pf.periodo_id");
			 }
			 filtroPeriodo.setCampos(camposPeriodo);
			 filtroPeriodo.setOperador("=");
			 //***** fin filtro periodos
			 listaFiltros.add(filtroPeriodo);
			 //filtro para zonas
			 FiltrosBean filtroZona = new FiltrosBean();
			 List<String> camposZona = new ArrayList<String>();
			 if(filtros.getIdZona() > 0 ){
				 camposZona.add("ee.zona_id");
			 }
			 filtroZona.setCampos(camposZona);
			 filtroZona.setOperador("=");
			 //***** fin filtro zona
			 listaFiltros.add(filtroZona);
			 //filtro para canales o categoria_cliente
			 FiltrosBean filtroCanal = new FiltrosBean();
			 List<String> camposCanal = new ArrayList<String>();
			 if(filtros.getIdCanal() > 0){
				 camposCanal.add("ee.categoria_cliente_id");
			 }
			 filtroCanal.setCampos(camposCanal);
			 filtroCanal.setOperador("=");
			 //***** fin filtro zona
			 listaFiltros.add(filtroCanal);
			 
			 List<Object> valores = new ArrayList<Object>();
			 if(filtros.getIdPeriodo() > 0 ){
				 valores.add(filtros.getIdPeriodo());
			 }
			 if(filtros.getIdZona() > 0){
				 valores.add(filtros.getIdZona());
			 }
			 if(filtros.getIdCanal() > 0 ){
				 valores.add(filtros.getIdCanal());
			 }
			 filtroSQL.setListaFiltros(listaFiltros);
			 filtroSQL.setListaValores(valores);
			//2.- Obtenemos la lista de Proyeccion de la FFVV
			listaProyeccionFFVV = mantProyeccionFFVVDao.listaProyeccionFFVV(filtroSQL);
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en BD al listar Proyecciones de FFVV " + e);
			response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDT);
			return response;
		}
		
		List<VentasEntity> listaVentasPorZona = null;
		try{
			FiltrosSQLBean filtroSQL= new FiltrosSQLBean();
			 List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			//filtro para periodos
			 FiltrosBean filtroPeriodo = new FiltrosBean();
			 List<String> camposPeriodo = new ArrayList<String>();
			 if(filtros.getIdPeriodo() > 0 ){
				 camposPeriodo.add("periodo_id");
			 }
			 filtroPeriodo.setCampos(camposPeriodo);
			 filtroPeriodo.setOperador("=");
			 //***** fin filtro periodos
			 listaFiltros.add(filtroPeriodo);
			 //filtro para zonas
			 FiltrosBean filtroZona = new FiltrosBean();
			 List<String> camposZona = new ArrayList<String>();
			 if(filtros.getIdZona() > 0 ){
				 camposZona.add("zona_id");
			 }
			 filtroZona.setCampos(camposZona);
			 filtroZona.setOperador("=");
			 //***** fin filtro zona
			 listaFiltros.add(filtroZona);
			 //filtro para canales o categoria_cliente
			 FiltrosBean filtroCanal = new FiltrosBean();
			 List<String> camposCanal = new ArrayList<String>();
			 if(filtros.getIdCanal() > 0 ){
				 camposCanal.add("categoria_cliente_id");
			 }
			 filtroCanal.setCampos(camposCanal);
			 filtroCanal.setOperador("=");
			 //***** fin filtro zona
			 listaFiltros.add(filtroCanal);
			 
			 List<Object> valores = new ArrayList<Object>();
			 if(filtros.getIdPeriodo() > 0 ){
				 valores.add(filtros.getIdPeriodo());
			 }
			 if(filtros.getIdZona() > 0 ){
				 valores.add(filtros.getIdZona());
			 }
			 if(filtros.getIdCanal() > 0 ){
				 valores.add(filtros.getIdCanal());
			 }
			 filtroSQL.setListaFiltros(listaFiltros);
			 filtroSQL.setListaValores(valores);
			 //3.- capturamos la venta de la FFVV x periodo , zona y canal
			listaVentasPorZona = consultaVentasDao.listaVentasDetalle(filtroSQL);
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en BD al lista de ventas por Zona  " + e);
			response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDT);
			return response;
		}
		
		List<ProyeccionFFVVBean> listaFFVV = new ArrayList<ProyeccionFFVVBean>();
		
		//recorremos la FFVV de actividad 1
		for(EmpleadoEstructuraEntity ffvv :listaEmpleados){
			ProyeccionFFVVBean bean = new ProyeccionFFVVBean();
			//seteamos los datos generales de la FFVV
			bean.setApellido(validaciones.validarCamposString(ffvv.getApellido()));
			bean.setNombre(validaciones.validarCamposString(ffvv.getNombre()));
			bean.setCargo(validaciones.validarCamposString(ffvv.getEstructura_venta()));
			bean.setCodigo(validaciones.validarCamposString(ffvv.getCodigo()));
			bean.setIdCanal(ffvv.getCategoria_cliente_id());
			bean.setIdEmpleado(ffvv.getEmpleado_id());
			bean.setIdEstructura(ffvv.getEstructura_venta_id());
			bean.setIdPadre(ffvv.getPadre_id());
			bean.setIdPeriodo(filtros.getIdPeriodo());
			bean.setIdZona(ffvv.getZona_id());
			bean.setIdFFVV(ffvv.getId());
			//capturamos la  proyeccion de la FFVV por periodo
			BigDecimal montoProyectado = BigDecimal.ZERO; 
			String bandaColor="";
			Boolean existe = false;
			for(ProyeccionFFVVEntity proyeccion : listaProyeccionFFVV){
				if(proyeccion.getEmpleado_estructura_id()==ffvv.getId() && filtros.getIdPeriodo()==proyeccion.getPeriodo_id()){
					bean.setMontoProyeccionPeriodo(proyeccion.getMonto_proyectado());
					existe=true;
					montoProyectado =proyeccion.getMonto_proyectado();
					//codigo de la tabla de proyeccion de FFVV
					bean.setId(proyeccion.getId());
					bandaColor = validaciones.validarCamposString(proyeccion.getCodigo_banda());
				}
			}
			if(existe){
				hijos= new ArrayList<EmpleadoEstructuraEntity>();
				//obtenemos los hijos de la FFVV que solo tengan permiso para ventas 
				hijos.add(ffvv);
				obtenerHijos(ffvv.getId());
				//capturamos las ventas de los hijos de la fuerza de ventas
				BigDecimal montoAvanceVentas = BigDecimal.ZERO; 
				for(EmpleadoEstructuraEntity hijoBean :  hijos){
					for(VentasEntity ventas : listaVentasPorZona){
						if(hijoBean.getId()== ventas.getVendedor_id()){
							montoAvanceVentas = montoAvanceVentas.add(ventas.getTotal());
						}
					}
				}
				
				bean.setMontoAvancePeriodo(montoAvanceVentas);
				
				BigDecimal porcentajeAvancePeriodo= BigDecimal.ZERO; 
				try{
					//calculamos el porcentaje de avance periodo
					porcentajeAvancePeriodo = montoAvanceVentas.divide(montoProyectado,4, RoundingMode.CEILING);
				}catch(Exception e){
					System.out.println("Error al calcular porcentaje - "+e );
					porcentajeAvancePeriodo= BigDecimal.ZERO; 
				}
				bean.setPorcentajeAvance(porcentajeAvancePeriodo.multiply(new BigDecimal(100)));
				String color = colorBanda(bandaColor,porcentajeAvancePeriodo,1);
				bean.setColorBanda(color);
				listaFFVV.add(bean);
			}
		}
		if(listaFFVV.size() > 0){
			response.setListaAvanceFFVV(listaFFVV);
			response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
			response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);	
		}else{
			System.out.println("No se genero la lista de Avance");
			response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDF);
		}
			
		return response;
	}
	public void obtenerHijos(int padreId) {
		for(EmpleadoEstructuraEntity ls : listaEmpleadosHijos){
			//obtenemos los hijos que solo tengan permiso para ventas 
			if (padreId == ls.getPadre_id()) {
				hijos.add(ls);
				obtenerHijos(ls.getId());
			}
		}
	}
	
	public String colorBanda(String codBanda,BigDecimal porcentaje, int tipoColor){
		String color ="";
			try{
				
			List<BandaProyeccionEntity> listaBandas = null;
			 try{
				 FiltrosSQLBean cadenaFiltros = new FiltrosSQLBean();
				 List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
				 FiltrosBean filtroCampos = new FiltrosBean();
				 List<String> campos = new ArrayList<String>();
				 campos.add("codigo");
				 filtroCampos.setCampos(campos);
				 filtroCampos.setOperador("=");
				 listaFiltros.add(filtroCampos);
				 List<Object> valores = new ArrayList<Object>();
				 valores.add(codBanda);
				 cadenaFiltros.setListaFiltros(listaFiltros);
				 cadenaFiltros.setListaValores(valores);
				 listaBandas = mantBandaProyeccionDao.listaBandasProyeccion(cadenaFiltros);
			}catch(Exception e){
				System.out.println("Error al Obtener las bandas: " + e);
			}
			 List<BigDecimal> bandas = new ArrayList<BigDecimal>();
			 if(listaBandas.size() > 0 && listaBandas!= null){
				 BigDecimal suma = BigDecimal.ZERO;
				 for(BandaProyeccionEntity ls : listaBandas){
					 suma = suma.add(ls.getPorcentaje());
					 bandas.add(suma);
				 }
			 }
		
			int i=0;
			for(BigDecimal ls :bandas ){
				++i;
				if(porcentaje.compareTo(ls) == -1){
					break;
				}
			}
			
			if(tipoColor ==1){
				switch(i){
				case 1:
					color = "C84545";
					break;
				case 2:
					color = "CFF30A";
					break;
				case 3:
					color = "02F327";
					break;
				}
			}
			
			if(tipoColor ==2){
				switch(i){
				case 1:
					color = "rojo";
					break;
				case 2:
					color = "amarillo";
					break;
				case 3:
					color = "verde";
					break;
				}
			}
			
			}catch(Exception e){
				System.out.println("Error en el proceso para capturar el color de la Banda - " + e);
				color="";
			}
			return color;
		}
	@Override
	public AvanceProyeccionProductResponse avanceProductosFFVV(
			String codTransaccion, FiltroOpcionesFFVVBean filtros) {
		
		String mensajeTransaccionMetodo = "[avanceProductosFFVV idTx=" + codTransaccion + "] - ";
		AvanceProyeccionProductResponse response = new AvanceProyeccionProductResponse();
		
		if(filtros.getIdPeriodo() < 1 && filtros.getIdFfvv() < 1){
			System.out.println(mensajeTransaccionMetodo+" Es necesario el codigo del periodo y el codigo de EMpleado");
			response.setIdTransaccion(codTransaccion);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		List<ProyeccionFFVVDetalleEntity> proyProducto=null;
		try{
			FiltrosSQLBean filtro = new FiltrosSQLBean();
			List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			List<Object> valores = new ArrayList<Object>();
			//filtro por periodo
			FiltrosBean filtroPeriodo = new FiltrosBean();
			List<String> campoPeriodo = new ArrayList<String>();
			campoPeriodo.add("pf.periodo_id");
			filtroPeriodo.setCampos(campoPeriodo);
			filtroPeriodo.setOperador("=");
			listaFiltros.add(filtroPeriodo);
			valores.add(filtros.getIdPeriodo());
			
			System.out.println("Filtro Recogido de FFVV : "+filtros.getIdFfvv() );
			if(filtros.getIdFfvv() > 0){
				//filtro por ffvv
				FiltrosBean filtroFfvv = new FiltrosBean();
				List<String> campoFfvv = new ArrayList<String>();
				campoFfvv.add("pf.empleado_estructura_id");
				filtroFfvv.setCampos(campoFfvv);
				filtroFfvv.setOperador("=");
				listaFiltros.add(filtroFfvv);
				valores.add(filtros.getIdFfvv());
			}

			filtro.setListaFiltros(listaFiltros);
			filtro.setListaValores(valores);
			//1.- consultamos la lista de proyeccion de productos de FFVV
			proyProducto = mantProyeccionFFVVDetalleDao.listaProyeccionFFVVdetalle(filtro);
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al Tratar de obtener la proyeccion de los productos" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		//2.-Obtenemos los subordinados del FFVV seleccionado
		ListaFFVVJerarquiaResponse jerarquiaFFVV = null; 
		try{
			jerarquiaFFVV = mantenimientoFFVVService.listaJerarquiaFFVV(codTransaccion, filtros.getIdFfvv());
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al Tratar de obtener la lista de FFVV subordinados" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		List<VentasEntity> ventasProducto =null;
		try{
			FiltrosSQLBean filtro = new FiltrosSQLBean();
			List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			List<Object> valores = new ArrayList<Object>();
			//filtro por periodo
			FiltrosBean filtroPeriodo = new FiltrosBean();
			List<String> campoPeriodo = new ArrayList<String>();
			campoPeriodo.add("periodo_id");
			filtroPeriodo.setCampos(campoPeriodo);
			filtroPeriodo.setOperador("=");
			listaFiltros.add(filtroPeriodo);
			valores.add(filtros.getIdPeriodo());
			
			if(filtros.getIdFfvv() > 0){
				//filtro por zona
				FiltrosBean filtroFfvv = new FiltrosBean();
				List<String> campoFfvv = new ArrayList<String>();
				campoFfvv.add("vendedor_id");
				filtroFfvv.setCampos(campoFfvv);
				filtroFfvv.setOperador("in");
				filtroFfvv.setNumeroValores(jerarquiaFFVV.getListaJerarquiaFFVV().size());
				listaFiltros.add(filtroFfvv);
				for(FFVVBean ffvv : jerarquiaFFVV.getListaJerarquiaFFVV()){
					valores.add(ffvv.getId());
				}
			}
			
			filtro.setListaFiltros(listaFiltros);
			filtro.setListaValores(valores);
			filtro.setCampoOrden("producto_id");
			filtro.setTipoOrden("asc");
			//2.-obtenemos las ventas de los productos 
			ventasProducto =consultaVentasDao.listaVentasDetalle(filtro);
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al Tratar de obtener la ventas de los productos " +e.getMessage());
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		List<AvanceVentaProductosBean> listaProductos = new ArrayList<AvanceVentaProductosBean>();
		//recorremos las proyeccion de los productos
		for(ProyeccionFFVVDetalleEntity proyeccion :proyProducto){
			AvanceVentaProductosBean bean = new AvanceVentaProductosBean();
			
			BigDecimal avanceProducto = BigDecimal.ZERO;
			for(VentasEntity ventas : ventasProducto){
				//capturamos las ventas por el codigo de producto
				if(proyeccion.getProducto_id()==ventas.getProducto_id()){
					avanceProducto = avanceProducto.add(ventas.getCantidad());
				}
			}
			
			BigDecimal porcentajeAvancePeriodo= BigDecimal.ZERO; 
			try{
				//calculamos el porcentaje de avance periodo
				porcentajeAvancePeriodo = avanceProducto.divide(proyeccion.getCantidad_proyectada(),4, RoundingMode.CEILING);
			}catch(Exception e){
				System.out.println("Error al calcular porcentaje - "+e );
				porcentajeAvancePeriodo= BigDecimal.ZERO; 
			}
			
			String color = colorBanda(validaciones.validarCamposString(proyeccion.getCodigo_banda()), porcentajeAvancePeriodo,2);
			
			bean.setAvancePorcentaje(porcentajeAvancePeriodo.multiply(new BigDecimal(100)));
			bean.setAvanceProducto(avanceProducto);
			bean.setCategoriaProducto(proyeccion.getCategoria_producto());
			bean.setCategoriaProductoId(proyeccion.getCategoria_producto_id());
			bean.setColorBanda(color);
			bean.setCodProd(validaciones.validarCamposString(proyeccion.getCod_prod()));
			bean.setId(proyeccion.getId());
			bean.setMarca(validaciones.validarCamposString(proyeccion.getMarca()));
			bean.setMarcaId(proyeccion.getMarca_id());
			bean.setPeriodoId(proyeccion.getPeriodo_id());
			bean.setProducto(validaciones.validarCamposString(proyeccion.getProducto()));
			bean.setProductoId(proyeccion.getProducto_id());
			bean.setProyeccionProducto(proyeccion.getCantidad_proyectada());
			listaProductos.add(bean);
		}
		response.setIdTransaccion(codTransaccion);
		response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
		response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
		response.setListaProductosZonas(listaProductos);
		return response;
	}
}
